4 追蹤者

應用程式組件

應用程式是服務定位器。 它們託管一組所謂的應用程式組件,這些組件提供不同的服務來處理請求。 例如,urlManager 組件負責將 Web 請求路由到適當的控制器;db 組件提供與資料庫相關的服務;等等。

每個應用程式組件都有一個 ID,在同一個應用程式中的其他應用程式組件中唯一識別自己。 您可以透過以下表達式存取應用程式組件

\Yii::$app->componentID

例如,您可以使用 \Yii::$app->db 來取得資料庫連線,並使用 \Yii::$app->cache 來取得向應用程式註冊的主要快取

應用程式組件在第一次透過上述表達式存取時建立。 任何後續的存取都將返回相同的組件實例。

應用程式組件可以是任何物件。 您可以透過在應用程式配置中配置 yii\base\Application::$components 屬性來註冊它們。 例如,

[
    'components' => [
        // register "cache" component using a class name
        'cache' => 'yii\caching\ApcCache',

        // register "db" component using a configuration array
        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=demo',
            'username' => 'root',
            'password' => '',
        ],

        // register "search" component using an anonymous function
        'search' => function () {
            return new app\components\SolrService;
        },
    ],
]

資訊:雖然您可以註冊任意數量的應用程式組件,但您應該謹慎地執行此操作。 應用程式組件就像全域變數。 使用過多的應用程式組件可能會使您的程式碼更難以測試和維護。 在許多情況下,您可以簡單地建立一個本地組件並在需要時使用它。

啟動組件

如上所述,應用程式組件僅在第一次被存取時才会被實例化。 如果在請求期間完全沒有被存取,則不會被實例化。 然而,有時您可能希望為每個請求實例化一個應用程式組件,即使它沒有被明確存取。 若要這樣做,您可以將其 ID 列在應用程式的 bootstrap 屬性中。

您也可以使用閉包來啟動自訂組件。 不需要返回已實例化的組件。 閉包也可以僅用於在 yii\base\Application 實例化後執行程式碼。

例如,以下應用程式配置確保 log 組件始終被載入

[
    'bootstrap' => [
        'log',
        function($app){
            return new ComponentX();
        },
        function($app){
            // some code
           return;
        }
    ],
    'components' => [
        'log' => [
            // configuration for "log" component
        ],
    ],
]

核心應用程式組件

Yii 定義了一組具有固定 ID 和預設配置的核心應用程式組件。 例如,request 組件用於收集有關使用者請求的資訊並將其解析為路由db 組件表示一個資料庫連線,您可以使用它執行資料庫查詢。 正是借助這些核心應用程式組件,Yii 應用程式才能夠處理使用者請求。

以下是預定義的核心應用程式組件列表。 您可以像配置普通應用程式組件一樣配置和自訂它們。 當您配置核心應用程式組件時,如果您沒有指定其類別,將會使用預設類別。

  • assetManager:管理資源包和資源發布。 請參閱「資源」章節以取得更多詳細資訊。
  • db:表示一個資料庫連線,您可以使用它執行資料庫查詢。 請注意,當您配置此組件時,您必須指定組件類別以及其他必需的組件屬性,例如 yii\db\Connection::$dsn。 請參閱「資料庫存取物件」章節以取得更多詳細資訊。
  • errorHandler:處理 PHP 錯誤和例外。 請參閱「錯誤處理」章節以取得更多詳細資訊。
  • formatter:在資料顯示給終端使用者時格式化資料。 例如,數字可能會以千位分隔符顯示,日期可能會以長格式格式化。 請參閱「資料格式化」章節以取得更多詳細資訊。
  • i18n:支援訊息翻譯和格式化。 請參閱「國際化」章節以取得更多詳細資訊。
  • log:管理日誌目標。 請參閱「日誌記錄」章節以取得更多詳細資訊。
  • yii\swiftmailer\Mailer:支援郵件撰寫和發送。 請參閱「郵件」章節以取得更多詳細資訊。
  • response:表示正在發送給終端使用者的回應。 請參閱「回應」章節以取得更多詳細資訊。
  • request:表示從終端使用者接收到的請求。 請參閱「請求」章節以取得更多詳細資訊。
  • session:表示會話資訊。 此組件僅在 Web 應用程式中可用。 請參閱「會話與 Cookie」章節以取得更多詳細資訊。
  • urlManager:支援 URL 解析和建立。 請參閱「路由與 URL 建立」章節以取得更多詳細資訊。
  • user:表示使用者身份驗證資訊。 此組件僅在 Web 應用程式中可用。 請參閱「身份驗證」章節以取得更多詳細資訊。
  • view:支援視圖渲染。 請參閱「視圖」章節以取得更多詳細資訊。

發現錯字或您認為此頁面需要改進?
在 github 上編輯 !